package cn.yudao.ymcc.service.impl;

import cn.yudao.ymcc.dto.UserInfoParamDto;
import cn.yudao.ymcc.service.ICreateOrderTokenService;
import cn.yudao.ymcc.utils.AssertUtil;
import cn.yudao.ymcc.utils.SecurityGetUserInfoUtil;
import cn.yudao.ymcc.utils.StrUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class CreateOrderTokenServiceImpl implements ICreateOrderTokenService {

    public static final String KEY = "token:%s:%s";

    @Autowired
    private RedisTemplate<Object,Object> redisTemplate;

    /**
    * @Title: createToken
    * @Description: 获取订单的唯一token
    * @Author: Mr.Jia
    * @Version: 1.0
    * @Date:  2022/8/17 17:22
    * @Parameters:
    * @Return
    */
    @Override
    public String createToken(String courseId) {
        // 非空校验
        AssertUtil.isNotNull(courseId,"非法请求");

        // 判断获取tokenkey
        // 判断用户是否拥有此视频对应的课程
        // 通过自定义的方法获取userInfoParamDto对象得到security上下文对象中的用户信息
        UserInfoParamDto userInfoParamDto = SecurityGetUserInfoUtil.getUserInfoParamDto();
        Long LoginId = userInfoParamDto.getId();
        String tokenKey = String.format(KEY, LoginId, courseId);
//        String token = (String)redisTemplate.opsForValue().get(tokenKey);
//        // 如果不存在
//        if (StringUtils.isEmpty(token)){
//            // 生成一个key
//            token = StrUtils.getComplexRandomString(4);
//        }
        String token = StrUtils.getComplexRandomString(4);
        // 将数据存入redis，设置10分钟有效
        redisTemplate.opsForValue().set(tokenKey,token,10, TimeUnit.MINUTES);
        return token;
    }
}
